草庐IT

c++ - 什么是 void(*)(void *)

全部标签

C - 在 strdup() 之后释放内存

我正在学习LearnCtheHardway在线类(class)。在下面的代码示例中,我不明白为什么需要两次free()调用。我以为只需要调用一次free(),因为只有一个malloc()发生。有人能解释一下为什么我们需要两个吗?如果我注释掉free(who->name);那么valgrind会告诉我我丢失了一block内存,就像这样;LEAKSUMMARY:definitelylost:21bytesin2blocks代码如下:#include#include#include#includestructPerson{char*name;intage;intheight;intweigh

c++ - 在 C++ 中为零大小的分配返回唯一地址的基本原理是什么?

在C++中为零大小的分配返回唯一地址的基本原理是什么?背景:C11标准中提到了malloc(7.20.3内存管理功能):Ifthesizeofthespacerequestediszero,thebehaviorisimplementationdefined:eitheranullpointerisreturned,orthebehaviorisasifthesizeweresomenonzerovalue,exceptthatthereturnedpointershallnotbeusedtoaccessanobject.也就是说,正如我所见,malloc对于零大小的分配总是成功的,

c++ - 在 C++ 中为零大小的分配返回唯一地址的基本原理是什么?

在C++中为零大小的分配返回唯一地址的基本原理是什么?背景:C11标准中提到了malloc(7.20.3内存管理功能):Ifthesizeofthespacerequestediszero,thebehaviorisimplementationdefined:eitheranullpointerisreturned,orthebehaviorisasifthesizeweresomenonzerovalue,exceptthatthereturnedpointershallnotbeusedtoaccessanobject.也就是说,正如我所见,malloc对于零大小的分配总是成功的,

c++ - 为什么 C 和 C++ 支持在结构中按成员分配数组,但通常不支持?

我了解不支持数组的成员分配,因此以下内容将不起作用:intnum1[3]={1,2,3};intnum2[3];num2=num1;//"error:invalidarrayassignment"我只是接受了这一点,认为该语言的目的是提供一个开放式框架,并让用户决定如何实现诸如复制数组之类的事情。但是,以下方法确实有效:structmyStruct{intnum[3];};structmyStructstruct1={{1,2,3}};structmyStructstruct2;struct2=struct1;数组num[3]是从其在struct1中的实例按成员分配到其在struct2

c++ - 为什么 C 和 C++ 支持在结构中按成员分配数组,但通常不支持?

我了解不支持数组的成员分配,因此以下内容将不起作用:intnum1[3]={1,2,3};intnum2[3];num2=num1;//"error:invalidarrayassignment"我只是接受了这一点,认为该语言的目的是提供一个开放式框架,并让用户决定如何实现诸如复制数组之类的事情。但是,以下方法确实有效:structmyStruct{intnum[3];};structmyStructstruct1={{1,2,3}};structmyStructstruct2;struct2=struct1;数组num[3]是从其在struct1中的实例按成员分配到其在struct2

c++ - 从 C 中的函数返回 {0}?

编译为“C”与编译为“C++”之间存在以下差异structA{intx;inty;};structAget(){return{0};}当编译为“C++”时一切正常。但是,当编译为“C”时;我得到了:错误:预期的表达式我可以通过这样做来解决:return(structA){0};但是,我想知道差异来自哪里。语言中的任何一点都可以引用这种差异的来源吗? 最佳答案 两者使用完全不同的机制,一种是C++11特有的,另一种是C99特有的。第一位,structAget(){return{0};}取决于C++11中的[stmt.return](6

c++ - 从 C 中的函数返回 {0}?

编译为“C”与编译为“C++”之间存在以下差异structA{intx;inty;};structAget(){return{0};}当编译为“C++”时一切正常。但是,当编译为“C”时;我得到了:错误:预期的表达式我可以通过这样做来解决:return(structA){0};但是,我想知道差异来自哪里。语言中的任何一点都可以引用这种差异的来源吗? 最佳答案 两者使用完全不同的机制,一种是C++11特有的,另一种是C99特有的。第一位,structAget(){return{0};}取决于C++11中的[stmt.return](6

c++ - 如何从 c 文件调用 c++ 类及其方法

我正在尝试访问一个C++类并从.c文件中调用它的方法。我在谷歌上搜索了这个主题并找到了http://developers.sun.com/solaris/articles/mixing.html上面写着:Youcanwriteextern"C"functionsinC++thataccessclassMobjectsandcallthemfromCcode.这里是一个设计用来调用成员函数foo的C++函数:extern"C"intcall_M_foo(M*m,inti){returnm->foo(i);}我的问题是我应该把about行放在哪里?在我的C++.h文件中?还是C.h文件?它

c++ - 如何从 c 文件调用 c++ 类及其方法

我正在尝试访问一个C++类并从.c文件中调用它的方法。我在谷歌上搜索了这个主题并找到了http://developers.sun.com/solaris/articles/mixing.html上面写着:Youcanwriteextern"C"functionsinC++thataccessclassMobjectsandcallthemfromCcode.这里是一个设计用来调用成员函数foo的C++函数:extern"C"intcall_M_foo(M*m,inti){returnm->foo(i);}我的问题是我应该把about行放在哪里?在我的C++.h文件中?还是C.h文件?它

c++ - 通过更高级别的结构访问子变量

如果我有这些结构:typedefstruct{intx;}foo;typedefstruct{foof;}bar;通常你会通过b.f.x访问x,但是有没有办法设置它,这样你就可以访问元素x而无需引用f?barb;b.x=...我的第一个直觉是你不能,因为如果两个子结构都有一个成员x并且我无法弄清楚编译错误会是什么,那么可能会发生名称冲突。不过,我记得我曾在一些可行的框架中工作过。在C++中,我曾经在一个存在bar的框架中工作过,您可以从不同的类作为成员变量this->x访问它的成员。我正在尝试弄清楚如何做到这一点。 最佳答案 你可以